// 加载
export const ShowLoading = (title = '加载中') => wx.showLoading({ title, mask: true })
// 隐藏加载
export const HideLoading = () => wx.hideLoading()

export const Toast = (title, icon = 'none', mask = true) => wx.showToast({ title, icon, mask })

export const GetStorage = (key) => wx.getStorageSync(key)

export const SetStorage = (key, data) => wx.setStorage({ key, data })

export const RemoveStorage = (key) => wx.removeStorage({ key })

export const ClearStorage = () => wx.clearStorage()


/**
 * 文件操作权限功能
 */
export class FileSystemManager {
    static fs = wx.getFileSystemManager()
    /**
     * @function CheckDirectory
     * 检查目录是否存在,不存在就创建
     * 
     * @param {string} path 目录地址，为空为系统获取
     * 
     * @returns {Promise}
     */
    static CheckDirectory(path) {
        return new Promise((resolve, reject) => {
            FileSystemManager.fs.access({ // 判断文件/目录是否存在
                path: path || wx.env.USER_DATA_PATH,
                success(res) {
                    resolve(res)
                },
                fail() {
                    FileSystemManager.fs.mkdir({ //判断文件/目录是否存在
                        dirPath: path || wx.env.USER_DATA_PATH,
                        success(res) {
                            resolve(res)
                        },
                        fail(err) {
                            reject(err)
                        }
                    })
                }
            })
        })
    }
    /**
      * 读取文件夹  返回文件夹内容 
      * @param {string} path 目录地址，为空为系统获取
      */
    static readdir(paht) {
        return new Promise((resolve, reject) => {
            FileSystemManager.fs.readdir({
                dirPath: paht || wx.env.USER_DATA_PATH,
                success({ errMsg, files }) {
                    if (errMsg === 'readdir:ok') {
                        resolve(files)
                    }
                },
                fail(err) {
                    reject(err)
                }
            })
        })
    }

    /**
     * 保存文件
     * @param {stirng} FileAddress 保存文件源地址
     * @param {stirng} SaveAddress 保存的新地址
     */
    static fsSaveFile(FileAddress, SaveAddress) {
        return new Promise((resolve, reject) => {
            FileSystemManager.fs.saveFile({
                tempFilePath: FileAddress,
                filePath: SaveAddress, //保存的时候必须跟上路径和文件名
                success(res) {
                    resolve(res)
                },
                fail(err) {
                    reject(err)
                }
            })
        })
    }
}
/**
 * 录音管理
 */
export class AudioSystemManager {
    constructor(){
        const AudioManager = wx.getRecorderManager()
        this.AudioManager = AudioManager;
    }
    /**
     * 开始
     */
    start(){
        
        this.AudioManager.start()
        this.AudioManager.onStart(()=>{
            console.log('开始录音')
        })
    }
    /**
     * 结束
     * @param {*} cb 
     */
    stop(cb=()=>{}){
        this.AudioManager.stop()
        this.AudioManager.onStop((data)=>{
            console.log(data,'stop');
            cb(data)
        })
    }
}

/**
 * @class InnerAudioContext
 * 音频播放
 * @function play 播放
 * @function pause 暂停
 * @function stop 停止
 * @function breakpoint 断点播放
 */
export class  InnerAudioContext{
    constructor(src){
        // 0 为未播放 1 播放 2 暂停 3 停止 
        this.type = 0
        this.innerAudioContext = wx.createInnerAudioContext({
            useWebAudioImplement: true // 是否使用 WebAudio 作为底层音频驱动，默认关闭。对于短音频、播放频繁的音频建议开启此选项，开启后将获得更优的性能表现。由于开启此选项后也会带来一定的内存增长，因此对于长音频建议关闭此选项
          })
        this.innerAudioContext.src = src

        // 监听音频自然播放至结束的事件
        this.innerAudioContext.onEnded(()=>{
            console.log('监听音频自然播放至结束的事件')
            this.type = 0
        })

    }
    play(){
        this.innerAudioContext.play() // 播放
        this.innerAudioContext.onPlay(()=>{
            console.log(this,'播放')
            this.type = 1
        })
    }

    pause(){

        this.innerAudioContext.pause() // 暂停
        // useWebAudioImplement 设置为true 监听不生效
        // this.innerAudioContext.onPause(()=>{
        //     console.log(this,'暂停')
        //     this.type = 0
        // })
    }
    stop(){
        this.innerAudioContext.stop() // 停止
        this.innerAudioContext.onStop(()=>{
            console.log('停止停止');
        })
    
    }
    breakpoint(){
        this.type === 0 ? this.play() : this.type === 1 ? (this.pause(), this.type = 0) :"";
        // else if(this.type === 2){
        //     this.play()
        //     this.type = 0
        // }
    }
}

/**
 * 获取当前页面路径
 */
export const getPagePath = ()=>{
    if(getCurrentPages().length > 0 ){
        const page = getCurrentPages()[getCurrentPages().length-1]
        return {
            route:page.route,
            scene:page.__displayReporter.showOptions.scene
        }
    }else{
        return {route:'考虑为初始化行为',scene:"000"}
    }
} 

/**
 * 开发者可从小程序管理后台： 开发 -> 运维中心 -> 实时日志 进入小程序端日志查询页面
 * @param {string} fileName 页面所在位置
 * @param {Object} args 其余参数 
 * */ 
const VERSION = "0.0.5";
const realtimeLogger = wx.getRealtimeLogManager ? wx.getRealtimeLogManager() : null;

export class logger {
    InfoLog = (fileName, ...args)=>{
        realtimeLogger && realtimeLogger.info(`[${VERSION}]`, fileName, " | ", ...args);
    }

     ErrorLog = (fileName, ...args)=>{
        realtimeLogger && realtimeLogger.error(`[${VERSION}]`, fileName, " | ", ...args);
    }

    getLogger = (fileName)=> {
        return {
            InfoLog: function(...args) {
                InfoLog(fileName, ...args)
            },
            ErrorLog: function(...args) {
                ErrorLog(fileName, ...args)
            }
        }
    }
}


